home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / p4 / p4-1_2a.lha / p4-1.2a / messages / sr_test.c < prev    next >
C/C++ Source or Header  |  1992-10-28  |  2KB  |  90 lines

  1. #include "p4.h"
  2. #include "sr_user.h"
  3.     
  4. main(argc,argv)
  5. int argc;
  6. char **argv;
  7. {
  8.     
  9.     p4_initenv(&argc,argv);
  10.     if (p4_get_my_id() == 0)
  11.     {
  12.         p4_create_procgroup();
  13.     master();
  14.     }
  15.     else
  16.     {
  17.     slave();
  18.     }
  19.     p4_wait_for_end();
  20. }
  21.  
  22. master()
  23. {
  24.     char msg[200];
  25.     int i, my_id, size, type, from;
  26.     char *incoming, *cp;
  27.     int start_time,end_time;
  28.     
  29.     my_id = p4_get_my_id();
  30.     
  31.     printf("enter a string:\n");
  32.     while (fgets(msg, sizeof(msg), stdin) != NULL)
  33.     {
  34.         for(cp=msg, i=1; *cp; i++, cp++)
  35.         if(*cp == '\n')
  36.         {
  37.         *cp = 0;
  38.         break;
  39.         }
  40.     start_time = p4_clock();
  41.     p4_sendr(100, 1, msg, i);
  42.     type = -1;
  43.     from = -1;
  44.     incoming = NULL;
  45.     p4_recv(&type, &from, &incoming, &size);
  46.     end_time = p4_clock();
  47.     printf("total time=%d \n",end_time-start_time);
  48.     printf("master received :%s: from %d\n", incoming, from);
  49.     p4_msg_free(incoming);
  50.     printf("enter a string:\n");
  51.     }
  52.     
  53.     p4_sendr(END, 1, msg, 0);
  54.     type = -1;
  55.     from = -1;
  56.     incoming = NULL;
  57.     p4_recv(&type, &from, &incoming, &size);
  58.     p4_msg_free(incoming);
  59.     
  60.     printf("master exiting normally\n");
  61. }
  62.  
  63. slave()    
  64. {
  65.     int done;
  66.     int my_id, next, size;
  67.     int num_total_slaves, type, from;
  68.     char *incoming;
  69.     
  70.     my_id = p4_get_my_id();
  71.     num_total_slaves = p4_num_total_slaves();
  72.     if (my_id == num_total_slaves)
  73.         next = 0;
  74.     else
  75.     next = my_id + 1;
  76.     done = FALSE;
  77.     while (!done)
  78.     {
  79.     type = -1;
  80.     from = -1;
  81.     incoming = NULL;
  82.     p4_recv(&type,&from, &incoming, &size);
  83.     if (type == END)
  84.         done = TRUE;
  85.     p4_send(type, next, incoming, size);
  86.     p4_msg_free(incoming);
  87.     }
  88. }
  89.  
  90.